// function showcount(x){
//     var count =x|0; 
//     var poet={
//         age:function(){
//             return count+=1;
//         }
//     }
//     return poet;
// }

// var counter = showcount(18);
// //
// console.log(counter.age());
// console.log(counter.age());

// function bert(x){
//     var arr = x|0;
//     var ver ={
//         age2:function(){
//             return arr+=1;
//         }
//     }
//     return ver;
// }

// var conutters = bert();

// console.log(conutters.age2());
// console.log(conutters.age2());

'use stricr'

// function f1(){
//     var n = 99;
//     add = function(){
//         n+=1;
//     }
//     function f2(){
//         alert(n);
//     }
//     return f2;
// }

// var rest = f1();//99
// console.log(rest());
// //console.log(add());
// console.log(rest());//100
//思考题
// var name = '詹姆斯 戴维斯'

// var arr = {
//     name :'科比',
//     getNameFunc:function(){
//         return function(){
//             return this.name;
//         };
//     }
// };
// console.log(alert(arr.getNameFunc()()));

//每次外部函数执行的时 候，外部函数的引用地址不同，
//都会重新创建一个新的地址
// getNameFunc:function(){
//     var that = this;
//     return function(){
//         return that.name;
//     };
// }

//闭包应用场景
//1
// function funA(){
//     var a = 10;
//     return function(){
//         alert(a);
//     }
// }
// var b = funA();
// console.log(b());//10

// //2
// function outerFun(){
//     var i = 0;
//     function innerFn(){
//         i++;
//         console.log(i);
//     }
//     return innerFn;
// }

// var inner = outerFun();
// console.log(inner());
// console.log(inner());
// console.log(inner());

// var inner2 = outerFun();
// console.log(inner2);
// console.log(inner2);
// console.log(inner2);

// //3
// var i = 0;
// function outerFn(){
//     function innnerFn(){
//         i++;
//         console.log(i);
//     }
//     return innnerFn;
// }
// var inner3 = outerFun();
// var inner4 = outerFun();
// console.log(inner3);
// console.log(inner4);
// console.log(inner3);
// console.log(inner4); //1 2 3 4

//4
// function fn(){
//     var a = 3;
//     return function(){
//         return ++a;
//     }
// }
// console.log(alert(fn()()));//4
// console.log(alert(fn()()));//4

//5
// function outerFn(){
//     var i = 0;
//     function innnerFn(){
//         i++;
//         console.log(i);
//     }
//     return innnerFn;
// }
// var iner = outerFn();
// var iner1 = outerFn();

// console.log(iner());//1
// console.log(iner1());//2

//6

// (function(){
//     var m =0;
//     function getM(){
//         return m;
//     }
//     function seta(val){
//         m=val;
//     }
//     Window.g = getM;
//     window.f = seta;
// })();
// console.log(f(100));
// console.log(g());

//7
// function a(){
//     var i = 0;
//     function b(){
//         alert(++i);
//     }
//     return b
// }
// var c = a();
// console.log(c());//1
// console.log(c());//2

//8
// function f(){
//     var count =0;
//     return function(){
//         count++;
//         console.log(count);
//     }
// }
// var t1 =f();
// console.log(t1);//1
// console.log(t2);
// console.log(t3);//3

//9
// var add = function(x){
//     var sum = 1;
//     var tmp = function(x){
//         sum = sum+x;
//         return tmp;
//     }
//     tmp.toString =function(){
//         return sum;
//     }
//     return tmp;
// }
// console.log(add(1)(2)(3));//6

//10
// var lis = document.getElementsByTagName('li');
// for(var i =0;i<lis.length;i++){
//     (function(i){
//         lis[i].onclick= function(){
//             console.log(i);
//         }
//     })();//事件处理函数中闭包的写法
// }

// 11
// function m1(){
//     var x = 1;
//     return function(){
//          console.log(++x);
//     }
// }

// 12
// function fn(){
//     var arr = [];
//     for(var i = 0;i < 5;i ++){
//       arr[i] = (function(i){
//           return function (){
//               return i;
//           };
//       })(i);
//     }
//     return arr;
//   }
//   var list = fn();
//   for(var i = 0,len = list.length;i < len ; i ++){
//     console.log(list[i]());
//   }  //0 1 2 3 4





// var a = 25;
// function ab(){
//     alert(a);//undefined
//     var a =10;
// }
// ab();
// //如果变量和函数同名的话，函数优先
// console.log(a);//25

// function a(){
//     console.log('大黄');
// }
// var a = 1;
// console.log(a);//1


// function make(arr,item){
//     var res = new Array();
//     for(let i=0;i<arr.length;i++){
//         res[i] = function(){
//             //let声明的变量只在let所在代码块内有效，因此每次循环的i都是一个新的变量           
//             return item(arr[i]);
//         };
//     }
//     return res;
// }
// console.log(make());

function a(){
    alert('大黄');
    function abs(){
        alert('詹姆斯')
    }
    abs();
}
console.log(a());

function a(){
    alert('ff');
    return function(){
        alert('kkk');
    }
}
console.log(newFun=a());//FF
console.log(newFun);